package com.example.daibanshiwu.controller;

import com.example.daibanshiwu.Service.LogService;
import com.example.daibanshiwu.pojo.ArchiveDTO;
import com.example.daibanshiwu.pojo.Log;
import com.example.daibanshiwu.pojo.Result;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/log")
public class LogController {
    private final LogService logService;

    public LogController(LogService logService) {
        this.logService = logService;
    }

    //插入日志数据信息
    @PostMapping("/add")
    public ResponseEntity<?> addLog(@RequestBody Log log) {
        try {
            logService.createLog(log);
            return ResponseEntity.status(HttpStatus.CREATED).body(log);
        } catch (Exception e) {
            e.printStackTrace(); // 打印错误日志
            // 返回 500 服务器内部错误，并附带错误信息
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("创建日志失败: " + e.getMessage());
        }
    }

    //查询数据库并填入前端日志数据
    @GetMapping("/getLog")
    public ResponseEntity<List<Log>> getAllLogs() {
        try {
            List<Log> logs = logService.getAllLogs();
            return ResponseEntity.ok(logs);
        } catch (Exception e) {
            e.printStackTrace();
            // 如果查询出错，可以返回一个空列表和服务器错误状态码
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
        }
    }
    @PostMapping("/setLogs")
    public Result  setAllLogs(@RequestBody Log log){
        // 安全起见，可以从Token中解析出 user_id 和 user_name，覆盖前端传来的值
         int currentUserId = log.userId; // 从Token获取
         String currentUserName = log.userName; // 从Token获取
        String currentModule = log.module;
        String status = log.status;
        String actionTime = log.actionName;
        String actionType = log.actionType;
        log.setModule(currentModule);
         log.setUserid(currentUserId);
         log.setUserName(currentUserName);
         log.setStatus(status);
         log.setActionName(actionTime);
         log.setActionType(actionType);
         log.setOperationTime(java.time.LocalDateTime.now());
        logService.createLog(log); // createLog 内部会设置当前时间并插入数据库
        System.out.println("ddddddddddddddddddddddddddddd");
        return Result.success(); // 简单返回成功即可，不需要返回列表
    }
    @GetMapping("/selectPersonal/{userId}")
    public Result listPersonalLogs(@PathVariable Long userId) { // 3. 使用 @PathVariable 接收参数
        // 现在，userId 变量的值就是从前端URL中传过来的那个ID

        System.out.println(">>> [Service] 正在为用户ID查询个人事务: " + userId);

        // 调用你的业务逻辑层，传入动态获取的 userId
        // 假设你的 logService.getLogById(userId) 是正确的业务方法
        // List<Log> personalLogs = logService.getLogById(userId);

        // 通常，你应该返回查询到的数据，而不仅仅是一条成功消息
        // return Result.success(personalLogs);

        // 暂时保持和你原逻辑一致，只调用服务并返回成功消息
        logService.getLogById(userId);
        return Result.success("成功获取用户 " + userId + " 的个人事务数据");
    }
}
